#include <iostream>
using namespace std;


// 继承中的同名静态成员处理方式

// 父类
class Base
{
public:

    // 编译阶段分配内存，所有对象共享统一分数据，类内声明类外要初始化。
    static int m_A;

    static void func()
    {
        cout << "Base - static func()" << endl;
    }
};

int Base::m_A = 100;


// 公共继承
class Son : public Base
{
public:
    static int m_A;
    static void func()
    {
        cout << "Son  - static func()" << endl;
    }
};
int Son::m_A = 200;

// 同名静态成员属性处理
void test01() 
{
    // // 通过对象访问
    // Son  s;
    // cout << "Son  m_A = " << s.m_A << endl;
    // // 如果通过子类对象访问，到父类中的同名成员，需要加一个作用域
    // cout << "Base m_A = " << s.Base::m_A << endl;
    // 通过类名访问
    cout<< "通过类名访问:" << endl;
    cout << "Son  m_A = " << Son::m_A << endl;
    cout << "Base m_A = " << Son::Base::m_A << endl;
} 


// // 同名静态成员属性处理
// void test01() 
// {
//     // // 通过对象访问
//     // Son  s;
//     // cout << "Son  m_A = " << s.m_A << endl;
//     // // 如果通过子类对象访问，到父类中的同名成员，需要加一个作用域
//     // cout << "Base m_A = " << s.Base::m_A << endl;
//     // 通过类名访问
//     cout<< "通过类名访问:" << endl;
//     cout << "Son  m_A = " << Son::m_A << endl;
//     cout << "Base m_A = " << Son::Base::m_A << endl;
// } 
// 静态同名函数处理方式
void test02()
{
    // 通过对象访问
    Son  s;
    s.func();
    s.Base::func();
    // 同名成员函数在父类存在重载时，调用存在错误
    // 如国子类中出现和父类同名的成员函数，子类的同名成员会隐藏掉父类中所有同名成员函数；不可直接访问！
    // s.Base::func(100);
    // 通过类名访问
    Son::func();
    Son::Base::func();
}

int main()
{
    // test01();
    test02();
    // cout << "hello" << endl;
    return 0;
}